package com.tan.androidtest.activity;

import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.AudioManager;
import android.provider.ContactsContract;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.widget.ListView;
import android.widget.TextView;

import com.tan.androidtest.R;
import com.tan.androidtest.adapter.ContactListAdapter;
import com.tan.androidtest.base.BaseActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 测试四大组件中的ContentProvider ContentResolver
 */

public class TestContentProviderActivity extends BaseActivity {

    private ListView lv_test;

    @Override
    public int initLayoutId() {
        return R.layout.activity_test_content_provider_layout;
    }

    @Override
    public void initTitle(TextView tv_bar_left, TextView tv_bar_title, TextView tv_bar_right) {
        tv_bar_title.setText("测试ContentProvider、ContentResolver");
    }

    @Override
    public void initView() {
        lv_test = findViewById(R.id.lv_test);
    }

    @Override
    public void initData() {
        try {
             AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            am.setMode(AudioManager.STREAM_SYSTEM);
            am.setStreamVolume(AudioManager.STREAM_SYSTEM, am.getStreamVolume(AudioManager.STREAM_MUSIC), AudioManager.MODE_CURRENT);//MODE_NORMAL,可能异常
        } catch (Exception e) {
            e.printStackTrace();
        }
        //魅族手机这个代码检测不到,下面申请权限也申请不到
        if (ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(TestContentProviderActivity.this, new String[]{android.Manifest.permission.READ_CONTACTS}, 1);
        } else {
            getData();
        }
    }


    /**
     * 有权限的情况下获取数据
     */
    private void getData() {
        //getContentResolver()方法得到应用的ContentResolver实例。
        // query（Phones.CONTENT_URI, null, null, null, null）。它是ContentResolver里的方法，负责查询所有联系人，并返回一个Cursor。这个方法参数比较多，每个参数的具体含义如下。
        //·  第一个参数为Uri，在这个例子里边这个Uri是联系人的Uri。
        //·  第二个参数是一个字符串的数组，数组里边的每一个字符串都是数据表中某一列的名字，它指定返回数据表中那些列的值。
        //·  第三个参数相当于SQL语句的where部分，描述哪些值是我们需要的。
        //·  第四个参数是一个字符串数组，它里边的值依次代替在第三个参数中出现的“?”符号。
        //·  第五个参数指定了排序的方式。
        List<Map<String, String>> beans = new ArrayList<>();
        ContentResolver contentResolver = getContentResolver();
        Cursor nameCursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        //获取联系人名字
        if (nameCursor != null) {
            while (nameCursor.moveToNext()) {
                Map<String, String> map = new HashMap<>();
                //获取联系人的ID
                String contactId = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.Contacts._ID));
                String name = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                map.put("name", name);
                //查询电话类型的数据操作
                Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                if (phoneCursor != null) {
                    while (phoneCursor.moveToNext()) {
                        String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        //添加Phone的信息
                        map.put("phoneNumber", phoneNumber);
                    }
                    phoneCursor.close();
                }
                beans.add(map);
            }
            nameCursor.close();

        }

        ContactListAdapter listAdapter = new ContactListAdapter(this);
        lv_test.setAdapter(listAdapter);
        listAdapter.loadBean(beans);
    }

}
